home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / dev / amos / SamplesMaster.lha / SamplesMaster.AMOS / SamplesMaster.amosSourceCode
Encoding:
AMOS Source Code  |  2000-12-14  |  48.6 KB  |  1,504 lines

  1. '-> SamplesMaster by Stefano Regattin  
  2. 'i> 7 luglio 1996
  3. 'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
  4. 'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
  5. 'm> 4,12,13,17 ottobre 1996
  6. 'm> 1,11,13,14 novembre 1996 
  7. 'm> 20 febbraio 1997 
  8. 'm> 8 marzo 1997 
  9. 'm> 17 giugno 1997 
  10. 'm> 10 novembre 1997 
  11. 'm> 31 marzo 1998
  12. 'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
  13. 'm> 5,7,8,9,19,23 luglio 1998
  14. 'm> 11 agosto 1998 
  15. 'm> 24 aprile 1999 
  16. 'm> 22,31 luglio 1999
  17. 'm> 28 novembre 1999 
  18. 'm> 4 dicembre 1999
  19. 'm> 20,21 maggio 2000
  20. 'm> 13 dicembre 2000 
  21. '--------------------
  22. Set Buffer 40
  23. BANCO=65535
  24. BANCODIIO=65534
  25. BANCO3=65533
  26. BANCO4=65532
  27. Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
  28. Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,BANCO4,CICLO,FILTRO
  29. Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
  30. Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
  31. Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
  32. Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
  33. Global YSLIDERINGRANDIMENTO,ZERO
  34. Global DIVISIONESLIDERINGRANDIMENTO#
  35. Dim F0RMADONDA(8191)
  36. Global F0RMADONDA()
  37. Proc SETTASCHERMO
  38. Proc ARCOBALENO
  39. Reserve As Chip Work BANCO,512
  40. FILTRO=True
  41. FREQUENZA=8363
  42. Proc CONDIZIONEINIZIALE
  43. Repeat 
  44.  Repeat 
  45.   TASTODELTOPOPREMUTO=Mouse Key
  46.   ZONATOPO=Mouse Zone
  47.   If TASTODELTOPOPREMUTO=1
  48.    If DENTROZONA=False
  49.     If ZONATOPO=1
  50.      'Suona il campione 
  51.      Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  52.      Proc SUONA
  53.     End If 
  54.     If ZONATOPO=2
  55.      'Ferma la riproduzione del campione  
  56.      Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
  57.      Sam Stop 
  58.     End If 
  59.     If ZONATOPO=3
  60.      'Attiva o disattiva la riproduzione all'infinito del campione  
  61.      CICLO= Not CICLO : Proc CICLO
  62.     End If 
  63.     If ZONATOPO=4
  64.      'Attiva o disattiva il filtro audio  
  65.      FILTRO= Not FILTRO : Proc FILTRO
  66.     End If 
  67.     If ZONATOPO=5
  68.      'Mostra tutto il campione  
  69.      Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
  70.      NUOVOINIZIOCAMPIONE=Start(BANCO)
  71.      NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  72.      LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  73.      LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  74.      Proc MOSTRACAMPIONE
  75.      INIZIO=True : Proc INIZIO
  76.      POSIZIONESLIDER=0
  77.      Proc SLIDERINGRANDIMENTO
  78.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  79.     End If 
  80.     If ZONATOPO=6
  81.      'Mostra una porzione del campione compresa tra tra le due linee verdi  
  82.      Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
  83.      Proc MOSTRACAMPIONE
  84.      INIZIO=True : Proc INIZIO
  85.      POSIZIONESLIDER=0
  86.      Proc SLIDERINGRANDIMENTO
  87.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  88.     End If 
  89.     If ZONATOPO=7
  90.      'Mostra l'inizio del campione ed attiva la linea verde marcatrice d'inizio 
  91.      ' come marcatore corrente  
  92.      INIZIO=True : Proc INIZIO
  93.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  94.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  95.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  96.     End If 
  97.     If ZONATOPO=8
  98.      'Mostra la fine del campione ed attiva la linea verde marcatrice della fine
  99.      ' come marcatore corrente
  100.      INIZIO=False : Proc INIZIO
  101.      POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  102.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  103.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  104.     End If 
  105.     If ZONATOPO=9
  106.      'Cerca lo zero all'indietro nel campione a partire dalla linea verde 
  107.      ' marcatrice corrente  
  108.      Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
  109.      If INIZIO=True
  110.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
  111.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  112.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  113.      Else 
  114.       Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
  115.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  116.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  117.      End If 
  118.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  119.      Proc SLIDERINGRANDIMENTO
  120.      Proc LINEE : Proc INGRANDISCI
  121.     End If 
  122.     If ZONATOPO=10
  123.      'Cerca lo zero avanti nel campione a partire dalla linea verde marcatrice
  124.      ' corrente 
  125.      Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
  126.      If INIZIO=True
  127.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
  128.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  129.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  130.      Else 
  131.       Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
  132.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  133.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  134.      End If 
  135.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  136.      Proc SLIDERINGRANDIMENTO
  137.      Proc LINEE : Proc INGRANDISCI
  138.     End If 
  139.     If ZONATOPO=11
  140.      'Carica un campione
  141.      Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
  142.      Proc CARICAUNFILE
  143.      Exit If SENZAMEMORIA=True,2
  144.      If Exist(FILE$)
  145.       Proc CARICARAWOIFF
  146.       Proc CONDIZIONEINIZIALE
  147.      End If 
  148.     End If 
  149.     If ZONATOPO=12
  150.      'Attiva la zona di ingrandimento o,se questa era gi� attiva, sposta la linea 
  151.      ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  152.      If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  153.       Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
  154.       If INIZIO=True
  155.        NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  156.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  157.       Else 
  158.        NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  159.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  160.       End If 
  161.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  162.       Proc SLIDERINGRANDIMENTO
  163.       Proc LINEE : Proc INGRANDISCI
  164.      Else 
  165.       ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  166.       Proc MOSTRALAZONAATTIVA
  167.      End If 
  168.      NUOVOMESSAGGIO=True
  169.     End If 
  170.     If ZONATOPO=13
  171.      'Attiva la zona del campione o, se questa era gi� attiva, sposta la linea
  172.      ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  173.      If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  174.       If INIZIO=True
  175.        NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  176.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  177.        POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  178.       Else 
  179.        NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  180.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  181.        POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
  182.       End If 
  183.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  184.       Proc SLIDERINGRANDIMENTO
  185.       Proc LINEE : Proc INGRANDISCI
  186.      Else 
  187.       ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  188.       Proc MOSTRALAZONAATTIVA
  189.      End If 
  190.     End If 
  191.     If ZONATOPO=14
  192.      'Genera un nuovo campione
  193.      Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
  194.      Proc GENERACAMPIONE
  195.      GENERACAMPIONE=False
  196.      Proc CONDIZIONEINIZIALE
  197.     End If 
  198.     If ZONATOPO=15
  199.      'Salva il campione come RAW od IFF 
  200.      Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
  201.      Proc SALVAUNFILE
  202.      Proc MESSAGGI
  203.     End If 
  204.     If ZONATOPO=16
  205.      'Esce dal programma
  206.      Exit 2
  207.     End If 
  208.     If ZONATOPO=18
  209.      'Reimposta la frequenza di riproduzione originale del campione 
  210.      Inverse On 
  211.      Print At(0,ULTIMALINEA-5);"Frequenza"
  212.      TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  213.      NUOVAFREQUENZA=FREQUENZA
  214.      Proc FREQUENZA
  215.      NUOVOMESSAGGIO=True
  216.     End If 
  217.     If ZONATOPO=19
  218.      'Porta la frequenza di riproduzione del campione avanti  
  219.      Inverse On 
  220.      Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  221.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  222.      Inc NUOVAFREQUENZA
  223.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  224.      Proc FREQUENZA
  225.      NUOVOMESSAGGIO=True
  226.     End If 
  227.     If ZONATOPO=20
  228.      'Porta la frequenza di riproduzione del campione indietro
  229.      Inverse On 
  230.      Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  231.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  232.      Dec NUOVAFREQUENZA
  233.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  234.      Proc FREQUENZA
  235.      NUOVOMESSAGGIO=True
  236.     End If 
  237.     If ZONATOPO=21
  238.      'Miscela due campioni con dissolvenza tra l'uno e l'altro
  239.      Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
  240.      Proc MISCELATIMBRI
  241.      GENERACAMPIONE=False
  242.      Proc CONDIZIONEINIZIALE
  243.     End If 
  244.     DENTROZONA=True
  245.    End If 
  246.    If ZONATOPO=17
  247.     'Attiva lo slider che permette di scegliere l'area ingrandita del campione 
  248.     ' da vedere
  249.     POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
  250.     Proc SLIDERINGRANDIMENTO
  251.     POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
  252.     Proc INGRANDISCI
  253.    End If 
  254.   Else If TASTODELTOPOPREMUTO=2
  255.    If ZONATOPO=19
  256.     'Porta la frequenza di riproduzione del campione avanti velocemente
  257.     Inverse On 
  258.     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  259.     Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
  260.     Inc NUOVAFREQUENZA
  261.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  262.     Proc FREQUENZA
  263.     NUOVOMESSAGGIO=True
  264.    End If 
  265.    If ZONATOPO=20
  266.     'Porta la frequenza di riproduzione del campioneindietro velocemente 
  267.     Inverse On 
  268.     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  269.     Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
  270.     Dec NUOVAFREQUENZA
  271.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  272.     Proc FREQUENZA
  273.     NUOVOMESSAGGIO=True
  274.    End If 
  275.   Else 
  276.    Inverse Off 
  277.    Print At(0,ULTIMALINEA-3);"Suona"
  278.    Print At(0,ULTIMALINEA-2);"Ferma"
  279.    Print At(19,ULTIMALINEA-2);"Tutto"
  280.    Print At(26,ULTIMALINEA-2);"Tra le linee"
  281.    Print At(51,ULTIMALINEA-2);"<Indietro"
  282.    Print At(61,ULTIMALINEA-2);"Avanti>"
  283.    Print At(69,ULTIMALINEA-3);"Carica"
  284.    Print At(69,ULTIMALINEA-2);"Salva"
  285.    Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  286.    Print At(26,ULTIMALINEA-5);"MixTimbri"
  287.    If NUOVOMESSAGGIO=True
  288.     Proc MESSAGGI
  289.     NUOVOMESSAGGIO=False
  290.    End If 
  291.    DENTROZONA=False
  292.   End If 
  293.   TASTOPREMUTO$=Inkey$
  294.  Until TASTOPREMUTO$<>""
  295.  If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  296.   If INIZIO=True
  297.    If TASTOPREMUTO$=Cright$
  298.     Add NUOVOINIZIOCAMPIONE,PASSO
  299.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  300.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  301.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  302.     Proc SLIDERINGRANDIMENTO
  303.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  304.    End If 
  305.    If TASTOPREMUTO$=Cleft$
  306.     Add NUOVOINIZIOCAMPIONE,-PASSO
  307.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  308.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  309.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  310.     Proc SLIDERINGRANDIMENTO
  311.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  312.    End If 
  313.   Else 
  314.    If TASTOPREMUTO$=Cright$
  315.     Add NUOVAFINECAMPIONE,PASSO
  316.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  317.     NUOVAFINECAMPIONE=Param : Proc LINEE
  318.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  319.     Proc SLIDERINGRANDIMENTO
  320.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  321.    End If 
  322.    If TASTOPREMUTO$=Cleft$
  323.     Add NUOVAFINECAMPIONE,-PASSO
  324.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  325.     NUOVAFINECAMPIONE=Param : Proc LINEE
  326.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  327.     Proc SLIDERINGRANDIMENTO
  328.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  329.    End If 
  330.   End If 
  331.  Else 
  332.   If INIZIO=True
  333.    If TASTOPREMUTO$=Cright$
  334.     If TASTODELTOPOPREMUTO=0
  335.      Add NUOVOINIZIOCAMPIONE,320
  336.     Else 
  337.      Inc NUOVOINIZIOCAMPIONE
  338.     End If 
  339.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  340.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  341.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  342.     Proc SLIDERINGRANDIMENTO
  343.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  344.    End If 
  345.    If TASTOPREMUTO$=Cleft$
  346.     If TASTODELTOPOPREMUTO=0
  347.      Add NUOVOINIZIOCAMPIONE,-320
  348.     Else 
  349.      Dec NUOVOINIZIOCAMPIONE
  350.     End If 
  351.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  352.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  353.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  354.     Proc SLIDERINGRANDIMENTO
  355.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  356.    End If 
  357.   Else 
  358.    If TASTOPREMUTO$=Cright$
  359.     If TASTODELTOPOPREMUTO=0
  360.      Add NUOVAFINECAMPIONE,320
  361.     Else 
  362.      Inc NUOVAFINECAMPIONE
  363.     End If 
  364.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  365.     NUOVAFINECAMPIONE=Param : Proc LINEE
  366.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  367.     Proc SLIDERINGRANDIMENTO
  368.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  369.    End If 
  370.    If TASTOPREMUTO$=Cleft$
  371.     If TASTODELTOPOPREMUTO=0
  372.      Add NUOVAFINECAMPIONE,-320
  373.     Else 
  374.      Dec NUOVAFINECAMPIONE
  375.     End If 
  376.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  377.     NUOVAFINECAMPIONE=Param : Proc LINEE
  378.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  379.     Proc SLIDERINGRANDIMENTO
  380.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  381.    End If 
  382.   End If 
  383.  End If 
  384.  If TASTOPREMUTO$=Cup$
  385.   ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  386.   Proc MOSTRALAZONAATTIVA
  387.  End If 
  388.  If TASTOPREMUTO$=Cdown$
  389.   ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  390.   Proc MOSTRALAZONAATTIVA
  391.  End If 
  392.  If TASTOPREMUTO$=" "
  393.   Inverse On : Print At(0,ULTIMALINEA-3),"Suona"
  394.   Proc SUONA
  395.  End If 
  396.  If TASTOPREMUTO$="c"
  397.  End If 
  398.  If TASTOPREMUTO$="s"
  399.  End If 
  400. Until TASTOPREMUTO$=Chr$(27)
  401. Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
  402. Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
  403. Procedure ARCOBALENO
  404.  Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  405.  Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  406.  Set Rainbow 0,1,16,"","",""
  407.  For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  408.  If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  409.  Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  410. End Proc
  411. Procedure AZZERAFORMADONDA
  412.  Shared LUNGHEZZASINTETICO
  413.  For A=0 To LUNGHEZZASINTETICO-1
  414.   F0RMADONDA(A)=0
  415.  Next A
  416. End Proc
  417. Procedure CARICARAWOIFF
  418.  INDIRIZZO=Start(BANCODIIO)+8
  419.  If Peek$(INDIRIZZO,4)="8SVX"
  420.   Add INDIRIZZO,12
  421.   LUNGHEZZABANCO=Leek(INDIRIZZO)
  422.   If LUNGHEZZABANCO=0
  423.    Add INDIRIZZO,4
  424.    LUNGHEZZABANCO=Leek(INDIRIZZO)
  425.   Else 
  426.    Add INDIRIZZO,4
  427.   End If 
  428.   Add INDIRIZZO,8
  429.   FREQUENZA=Deek(INDIRIZZO)
  430.   Add INDIRIZZO,8
  431.   If Peek$(INDIRIZZO,4)="NAME"
  432.    Add INDIRIZZO,4
  433.    DATO=Leek(INDIRIZZO)
  434.    Add INDIRIZZO,4+DATO
  435.   End If 
  436.   If Peek$(INDIRIZZO,4)="ANNO"
  437.    Add INDIRIZZO,4
  438.    DATO=Leek(INDIRIZZO)
  439.    Add INDIRIZZO,4
  440.    ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
  441.    Add INDIRIZZO,DATO
  442.   End If 
  443.   If Peek$(INDIRIZZO,4)="BODY"
  444.    Add INDIRIZZO,4
  445.    LUNGHEZZADATI=Leek(INDIRIZZO)
  446.    Add INDIRIZZO,4
  447.    LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
  448.    Reserve As Chip Work BANCO,LUNGHEZZABANCO
  449.    Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  450.   Else 
  451.    Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
  452.    Proc TIC["� un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
  453.    Wait 200
  454.    NOMEFILE$=""
  455.   End If 
  456.  Else 
  457.   LUNGHEZZABANCO=Length(BANCODIIO)
  458.   Reserve As Chip Work BANCO,LUNGHEZZABANCO
  459.   Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  460.   FREQUENZA=8363
  461.   ANNOTAZIONI$=""
  462.  End If 
  463.  Erase BANCODIIO
  464. End Proc
  465. Procedure CARICAUNFILE
  466.  Sam Loop Off : Sam Stop : CICLO=False
  467.  FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
  468.  If Exist(FILE$)
  469.   Open In 1,FILE$
  470.   LUNGHEZZABANCO=Max(Lof(1),512)
  471.   Close 1
  472.   MEMORIA=Chip Free+Fast Free
  473.   If LUNGHEZZABANCO>MEMORIA
  474.    Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  475.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  476.    SENZAMEMORIA=True
  477.   Else 
  478.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  479.    Bload FILE$,Start(BANCODIIO)
  480.    SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  481.    For A=1 To Len(FILE$)
  482.     If Instr(FILE$,"/",POSIZIONE)>0
  483.      SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  484.      POSIZIONE=SEPARATORECASSETTO+1
  485.     End If 
  486.    Next A
  487.    SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  488.    PERCORSO$=Left$(FILE$,SEPARATORE)
  489.    If Right$(PERCORSO$,1)="/"
  490.     PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
  491.    End If 
  492.    NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  493.    SENZAMEMORIA=False
  494.   End If 
  495.  End If 
  496. End Proc
  497. Procedure CERCALOZERO[POSIZIONE,AVANTI]
  498.  If AVANTI=True
  499.   Repeat 
  500.    Inc POSIZIONE
  501.    DATO=Peek(POSIZIONE)
  502.   Until DATO=0
  503.  Else 
  504.   Repeat 
  505.    Dec POSIZIONE
  506.    DATO=Peek(POSIZIONE)
  507.   Until DATO=0
  508.  End If 
  509. End Proc[POSIZIONE]
  510. Procedure CICLO
  511.  If CICLO=True
  512.   Sam Loop On 
  513.   If GENERACAMPIONE=True
  514.    Inverse On : Print At(12,8);"Ciclo" : Inverse Off 
  515.   Else 
  516.    Inverse On : Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  517.   End If 
  518.  Else 
  519.   Sam Loop Off 
  520.   If GENERACAMPIONE=True
  521.    Print At(12,8);"Ciclo"
  522.   Else 
  523.    Print At(6,ULTIMALINEA-3);"Ciclo"
  524.   End If 
  525.  End If 
  526. End Proc
  527. Procedure CONDIZIONEINIZIALE
  528.  INIZIO=True
  529.  NUOVOINIZIOCAMPIONE=Start(BANCO)
  530.  NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  531.  LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  532.  LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  533.  NUOVAFREQUENZA=FREQUENZA
  534.  Cls 
  535.  Proc MOSTRACAMPIONE
  536.  POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  537.  Proc INGRANDISCI
  538.  Proc SETTALEZONE
  539.  Proc MESSAGGI
  540.  Proc CICLO
  541.  Proc FILTRO
  542.  Proc FREQUENZA
  543.  ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  544.  Proc MOSTRALAZONAATTIVA
  545.  Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
  546. End Proc
  547. Procedure FILTRO
  548.  If FILTRO=True
  549.   Led On 
  550.   If GENERACAMPIONE=True
  551.    Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  552.   Else 
  553.    Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  554.   End If 
  555.  Else 
  556.   Led Off 
  557.   If GENERACAMPIONE=True
  558.    Print At(18,8);"Filtro"
  559.   Else 
  560.    Print At(12,ULTIMALINEA-3);"Filtro"
  561.   End If 
  562.  End If 
  563. End Proc
  564. Procedure FREQUENZA
  565.  If GENERACAMPIONE=True
  566.   Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
  567.  Else 
  568.   Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
  569.  End If 
  570.  Print " Hertz "
  571. End Proc
  572. Procedure GENERACAMPIONE
  573.  Shared ANNOTAZIONI$
  574.  Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  575.  NOMEFILE$="Sintetico"
  576.  GENERACAMPIONE=True
  577.  Cls 
  578.  Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
  579.  RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
  580.  Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
  581.  LUNGHEZZASINTETICO=512*RISPOSTA
  582.  Reserve Zone 21
  583.  Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
  584.  Set Zone 1,0,0 To 511,63
  585.  Print At(0,8);Zone$("Suona",2)
  586.  Print At(6,8);Zone$("Ferma",3)
  587.  Print At(12,8);Zone$("Ciclo",4)
  588.  Print At(18,8);Zone$("Filtro",5)
  589.  Set Zone 6,0,72 To 511,135
  590.  Print At(0,18);Zone$("Suona",7)
  591.  Print At(6,18);"Forme d'onda:"
  592.  Print At(6,19);Zone$("Sinusoidale",8)
  593.  Print At(6,20);Zone$("Triangolare",9)
  594.  Print At(6,21);Zone$("Dente di sega",10)
  595.  Print At(6,22);Zone$("Quadra",11)
  596.  Print At(6,23);Zone$("Disegno",12)
  597.  Print At(20,18);"Operazioni:"
  598.  Print At(20,19);Zone$("Somma",13)
  599.  Print At(20,20);Zone$("Sottrai",14)
  600.  Print At(20,21);Zone$("Inverti",15)
  601.  Print At(20,22);Zone$("Rovescia",16)
  602.  Print At(76,17); Using "####";1
  603.  Hslider 0,136 To 607,143,128,0,1
  604.  Set Zone 17,0,136 To 607,143
  605.  Print At(25,8);Zone$("Frequenza",18);
  606.  Print Zone$(Chr$(147)+Chr$(148),19);
  607.  Print Zone$(Chr$(149)+Chr$(150),20);
  608.  Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  609.  Print At(20,23);Zone$("Progressione",21)
  610.  Proc CICLO
  611.  Proc FILTRO
  612.  Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
  613.  Reserve As Chip Work BANCO4,LUNGHEZZASINTETICO
  614.  FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
  615.  LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
  616.  Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
  617.  Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  618.  Repeat 
  619.   Repeat 
  620.    TASTOPREMUTO$=Inkey$
  621.    TASTODELTOPOPREMUTO=Mouse Key
  622.    ZONATOPO=Mouse Zone
  623.    If TASTODELTOPOPREMUTO=1
  624.     If DENTROZONA=False
  625.      If ZONATOPO=2
  626.       Inverse On : Print At(0,8);"Suona"
  627.       Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  628.       Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  629.      End If 
  630.      If ZONATOPO=3
  631.       Inverse On : Print At(6,8);"Ferma"
  632.       Sam Stop 
  633.      End If 
  634.      If ZONATOPO=4
  635.       CICLO= Not CICLO : Proc CICLO
  636.      End If 
  637.      If ZONATOPO=5
  638.       FILTRO= Not FILTRO : Proc FILTRO
  639.      End If 
  640.      If ZONATOPO=7
  641.       Inverse On : Print At(0,18);"Suona"
  642.       Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  643.       Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  644.      End If 
  645.      If ZONATOPO=8
  646.       Inverse On : Print At(6,19);"Sinusoidale"
  647.       Cls 0,0,72 To 639+1,135+1
  648.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  649.       UNITA#=2*Pi#/LUNGHEZZASINTETICO
  650.       For X=0 To LUNGHEZZASINTETICO-1
  651.        DATO=Sin(UNITA#*X)*127
  652.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  653.        If DATO<0
  654.         Add DATO,256
  655.        End If 
  656.        INDIRIZZO=Start(BANCO4)+X
  657.        Poke INDIRIZZO,DATO
  658.       Next X
  659.       If MULTIPLO#>1
  660.        Proc MULTIPLO
  661.       End If 
  662.      End If 
  663.      If ZONATOPO=9
  664.       Inverse On : Print At(6,20);"Triangolare"
  665.       Cls 0,0,72 To 639+1,135+1
  666.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  667.       For X=0 To LUNGHEZZASINTETICO-1
  668.        If X<LUNGHEZZASINTETICO/4
  669.         DATO=(X*512)/LUNGHEZZASINTETICO
  670.        End If 
  671.        If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
  672.         DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
  673.        End If 
  674.        If X>LUNGHEZZASINTETICO/4*3-1
  675.         DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
  676.        End If 
  677.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  678.        If DATO<0
  679.         Add DATO,256
  680.        End If 
  681.        INDIRIZZO=Start(BANCO4)+X
  682.        Poke INDIRIZZO,DATO
  683.       Next X
  684.       If MULTIPLO#>1
  685.        Proc MULTIPLO
  686.       End If 
  687.      End If 
  688.      If ZONATOPO=10
  689.       Inverse On : Print At(6,21);"Dente di sega"
  690.       Cls 0,0,72 To 639+1,135+1
  691.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  692.       For X=0 To LUNGHEZZASINTETICO-1
  693.        DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
  694.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  695.        If DATO<0
  696.         Add DATO,256
  697.        End If 
  698.        INDIRIZZO=Start(BANCO4)+X
  699.        Poke INDIRIZZO,DATO
  700.       Next X
  701.       If MULTIPLO#>1
  702.        Proc MULTIPLO
  703.       End If 
  704.      End If 
  705.      If ZONATOPO=11
  706.       Inverse On : Print At(6,22);"Quadra"
  707.       Cls 0,0,72 To 639+1,135+1
  708.       Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
  709.       For X=0 To LUNGHEZZASINTETICO-1
  710.        If X<LUNGHEZZASINTETICO/2
  711.         DATO=127
  712.        Else 
  713.         DATO=-128
  714.        End If 
  715.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  716.        If DATO<0
  717.         Add DATO,256
  718.        End If 
  719.        INDIRIZZO=Start(BANCO4)+X
  720.        Poke INDIRIZZO,DATO
  721.       Next X
  722.       If MULTIPLO#>1
  723.        Proc MULTIPLO
  724.       End If 
  725.      End If 
  726.      If ZONATOPO=12
  727.       Inverse On : Print At(6,23);"Disegno"
  728.       Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
  729.       Repeat 
  730.        TASTODELTOPOPREMUTO=Mouse Key
  731.        ZONATOPO=Mouse Zone
  732.        If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
  733.         XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
  734.         Ink 0 : Box XTOPO,72 To XTOPO+1,135
  735.         Ink 2 : Draw XTOPO,103 To XTOPO+1,103
  736.         Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
  737.         DATO=(103-YTOPO)*4
  738.         If DATO<0
  739.          Add DATO,256
  740.         End If 
  741.         INDIRIZZO=Start(BANCO4)+XTOPO*LUNGHEZZASINTETICO/512
  742.         For A=0 To LUNGHEZZASINTETICO/512
  743.          Poke INDIRIZZO+A,DATO
  744.         Next A
  745.        End If 
  746.       Until TASTODELTOPOPREMUTO=2
  747.       Cls 0,0,72 To 639+1,135+1
  748.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  749.       Gr Locate 0,103
  750.       For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
  751.        DATO=Peek(Start(BANCO4)+X)
  752.        If DATO>127
  753.         Add DATO,-256
  754.        End If 
  755.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  756.       Next X
  757.       NUOVOMESSAGGIO=True
  758.      End If 
  759.      If ZONATOPO=13
  760.       Inverse On : Print At(20,19);"Somma"
  761.       Proc SOMMA
  762.       Proc MOSTRASINTETICO
  763.      End If 
  764.      If ZONATOPO=14
  765.       Inverse On : Print At(20,20);"Sottrai"
  766.       For X=0 To LUNGHEZZASINTETICO-1
  767.        DATO=Peek(Start(BANCO4)+X)
  768.        If DATO>127
  769.         Add DATO,-256
  770.        End If 
  771.        Add F0RMADONDA(X),-DATO
  772.       Next X
  773.       Proc MOSTRASINTETICO
  774.      End If 
  775.      If ZONATOPO=15
  776.       Inverse On : Print At(20,21);"Inverti"
  777.       Cls 0,0,72 To 639+1,135+1
  778.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  779.       Gr Locate 0,103
  780.       For X=0 To LUNGHEZZASINTETICO-1
  781.        DATO=Peek(Start(BANCO4)+X)
  782.        If DATO>127
  783.         Add DATO,-256
  784.        End If 
  785.        DATO= Not DATO
  786.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  787.        If DATO<0
  788.         Add DATO,256
  789.        End If 
  790.        INDIRIZZO=Start(BANCO4)+X
  791.        Poke INDIRIZZO,DATO
  792.       Next X
  793.      End If 
  794.      If ZONATOPO=16
  795.       Inverse On : Print At(20,22);"Rovescia"
  796.       Cls 0,0,72 To 639+1,135+1
  797.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  798.       Reserve As Work BANCO3,LUNGHEZZASINTETICO
  799.       For X=0 To LUNGHEZZASINTETICO-1
  800.        DATO=Peek(Start(BANCO4)+X)
  801.        INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
  802.        Poke INDIRIZZO,DATO
  803.        If DATO>127
  804.         Add DATO,-256
  805.        End If 
  806.        Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
  807.       Next X
  808.       Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCO4)
  809.       Erase BANCO3
  810.      End If 
  811.      If ZONATOPO=18
  812.       Inverse On : Print At(25,8);"Frequenza"
  813.       Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  814.       NUOVAFREQUENZA=FREQUENZA
  815.       Proc FREQUENZA
  816.       NUOVOMESSAGGIO=True
  817.      End If 
  818.      If ZONATOPO=19
  819.       Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  820.       Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  821.       Inc NUOVAFREQUENZA
  822.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  823.       Proc FREQUENZA
  824.       NUOVOMESSAGGIO=True
  825.      End If 
  826.      If ZONATOPO=20
  827.       Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  828.       Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  829.       Dec NUOVAFREQUENZA
  830.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  831.       Proc FREQUENZA
  832.       NUOVOMESSAGGIO=True
  833.      End If 
  834.      If ZONATOPO=21
  835.       Inverse On : Print At(20,23);"Progressione"
  836.       Proc TIC["Progressione aritmetica o geometrica (a/g)?",ULTIMALINEA]
  837.       RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  838.       If RISPOSTA$="a"
  839.        PROGRESSIONE$="Aritmetica"
  840.       End If 
  841.       If RISPOSTA$="g"
  842.        PROGRESSIONE$="Geometrica"
  843.       End If 
  844.       If PROGRESSIONE$="a" or PROGRESSIONE$="g"
  845.        Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  846.        Input "Inizio della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  847.        Curs Off 
  848.        If RISPOSTA$<>""
  849.         PRIMOTERMINE=Val(RISPOSTA$)
  850.         Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
  851.         Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  852.         Input "Fine della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  853.         Curs Off 
  854.         If RISPOSTA$<>""
  855.          ULTIMOTERMINE=Val(RISPOSTA$)
  856.          Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
  857.          Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  858.          Input "Numero di valori intermedi (1-126)?";RISPOSTA$;
  859.          Curs Off 
  860.          If RISPOSTA$<>""
  861.           VLORIINTERMEDI=Val(RISPOSTA$) : VLORITOTALI=VLORIINTERMEDI+2
  862.           Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
  863.           If PROGRESSIONE$="Aritmetica"
  864.            RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
  865.            For A=1 To VLORITOTALI
  866.             If A=VLORITOTALI
  867.              MULTIPLO#=ULTIMOTERMINE
  868.             Else 
  869.              MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
  870.             End If 
  871.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  872.             Proc MULTIPLO
  873.             Cls 0,0,72 To 639+1,135+1
  874.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  875.             Proc SOMMA
  876.            Next A
  877.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  878.             Loke Start(BANCO4)+A,0
  879.            Next A
  880.            Proc MOSTRASINTETICO
  881.           End If 
  882.           If PROGRESSIONE$="Geometrica"
  883.            RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
  884.            For A=1 To VLORITOTALI
  885.             If A=VLORITOTALI
  886.              MULTIPLO#=ULTIMOTERMINE
  887.             Else 
  888.              MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
  889.             End If 
  890.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  891.             Proc MULTIPLO
  892.             Cls 0,0,72 To 639+1,135+1
  893.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  894.             Proc SOMMA
  895.            Next A
  896.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  897.             Loke Start(BANCO4)+A,0
  898.            Next A
  899.            Proc MOSTRASINTETICO
  900.           End If 
  901.          End If 
  902.         End If 
  903.        End If 
  904.       End If 
  905.       PROGRESSIONE$=""
  906.       NUOVOMESSAGGIO=True
  907.      End If 
  908.      DENTROZONA=True
  909.     End If 
  910.     If ZONATOPO=17
  911.      MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
  912.      Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
  913.      MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
  914.     End If 
  915.    Else If TASTODELTOPOPREMUTO=2
  916.     If ZONATOPO=19
  917.      Inverse On 
  918.      Print At(34,8);Chr$(147)+Chr$(148)
  919.      Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  920.      Inc NUOVAFREQUENZA
  921.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  922.      Proc FREQUENZA
  923.      NUOVOMESSAGGIO=True
  924.     End If 
  925.     If ZONATOPO=20
  926.      Inverse On 
  927.      Print At(36,8);Chr$(149)+Chr$(150)
  928.      Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  929.      Dec NUOVAFREQUENZA
  930.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  931.      Proc FREQUENZA
  932.      NUOVOMESSAGGIO=True
  933.     End If 
  934.    Else 
  935.     Inverse Off 
  936.     Print At(0,8);"Suona"
  937.     Print At(6,8);"Ferma"
  938.     Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  939.     Print At(0,18);"Suona"
  940.     Print At(6,19);"Sinusoidale"
  941.     Print At(6,20);"Triangolare"
  942.     Print At(6,21);"Dente di sega"
  943.     Print At(6,22);"Quadra"
  944.     Print At(6,23);"Disegno"
  945.     Print At(20,19);"Somma"
  946.     Print At(20,20);"Sottrai"
  947.     Print At(20,21);"Inverti"
  948.     Print At(20,22);"Rovescia"
  949.     Print At(20,23);"Progressione"
  950.     If NUOVOMESSAGGIO=True
  951.      Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  952.      NUOVOMESSAGGIO=False
  953.     End If 
  954.     DENTROZONA=False
  955.    End If 
  956.   Until TASTOPREMUTO$<>""
  957.  Until TASTOPREMUTO$=Chr$(27)
  958.  Erase BANCO4
  959.  Proc AZZERAFORMADONDA
  960.  ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  961. End Proc
  962. Procedure INGRANDISCI
  963.  Cls 0,0,72 To 639+1,72+ALTEZZA+1
  964.  Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
  965.  Clip 0,72 To 639,72+ALTEZZA
  966.  Gr Locate 0,72+ZERO
  967.  For X=0 To 639
  968.   POSIZIONE=POSIZIONEINGRANDIMENTO+X
  969.   DATO=Peek(POSIZIONE)
  970.   If DATO>127
  971.    Add DATO,-256
  972.   End If 
  973.   If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
  974.    If POSIZIONE=Start(BANCO)+Length(BANCO)-1
  975.     Polyline X,72+ZERO-DATO To X,72+ZERO
  976.    Else 
  977.     Polyline To X,72+ZERO-DATO : Y=Ygr
  978.    End If 
  979.   Else 
  980.    Gr Locate X+1,72+ZERO
  981.   End If 
  982.   If POSIZIONE=NUOVOINIZIOCAMPIONE
  983.    Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  984.    Gr Writing 1 : Gr Locate X,Y
  985.   End If 
  986.   If POSIZIONE=NUOVAFINECAMPIONE
  987.    Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  988.    Draw X+3,72 To X+7,72
  989.    Draw X+3,74 To X+7,74
  990.    Draw X+3,72 To X+3,76
  991.    Gr Writing 1 : Gr Locate X,Y
  992.   End If 
  993.  Next X
  994.  Clip 
  995. End Proc
  996. Procedure INIZIO
  997.  If INIZIO=True
  998.   Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  999.   Print At(46,ULTIMALINEA-2);"Fine"
  1000.  Else 
  1001.   Print At(39,ULTIMALINEA-2);"Inizio"
  1002.   Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
  1003.  End If 
  1004. End Proc
  1005. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  1006.  '-> Limiti by Stefano Regattin 
  1007.  'i> 19 maggio 1996 
  1008.  'm> 12 giugno 1996 
  1009.  '--------------------------------------------------------
  1010.  'La procedura equivale alle seguenti linee di programma: 
  1011.  ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  1012.  ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  1013.  'Se LIMITEMINIMO ï¿½ maggiore di LIMITEMASSIMO ne scambia i valori 
  1014.  '----------------------------------------------------------------  
  1015.  If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  1016.  NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  1017. End Proc[NUMERO]
  1018. Procedure LINEE
  1019.  NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
  1020.  If NUOVOINIZIOCAMPIONE<INIZIOCAMPIONE
  1021.   NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE
  1022.   NUOVAFINECAMPIONE=NUOVOINIZIOCAMPIONE+511
  1023.  End If 
  1024.  NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
  1025.  Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1026.  XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
  1027.  Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1028.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1029.  XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
  1030.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1031.  Inverse Off : Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
  1032.  Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
  1033.  LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  1034.  LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  1035.  Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1036. End Proc
  1037. Procedure MESSAGGI
  1038.  Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
  1039.  Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
  1040. End Proc
  1041. Procedure MISCELATIMBRI
  1042.  Shared ANNOTAZIONI$
  1043.  Sam Loop Off : Sam Stop : CICLO=False
  1044.  Cls 
  1045.  FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
  1046.  If FILE$="" Then Pop Proc
  1047.  If Exist(FILE$)
  1048.   Open In 1,FILE$
  1049.   LUNGHEZZABANCO=Max(Lof(1),512)
  1050.   Close 1
  1051.   MEMORIA=Chip Free+Fast Free
  1052.   If LUNGHEZZABANCO>MEMORIA
  1053.    Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1054.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1055.    SENZAMEMORIA=True
  1056.   Else 
  1057.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1058.    Bload FILE$,Start(BANCODIIO)
  1059.    SENZAMEMORIA=False
  1060.    Proc CARICARAWOIFF
  1061.    LUNGHEZZABANCO1=LUNGHEZZABANCO
  1062.    Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
  1063.    Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  1064.   End If 
  1065.  End If 
  1066.  FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
  1067.  If FILE$="" Then Pop Proc
  1068.  If Exist(FILE$)
  1069.   Open In 1,FILE$
  1070.   LUNGHEZZABANCO=Max(Lof(1),512)
  1071.   Close 1
  1072.   MEMORIA=Chip Free+Fast Free
  1073.   If LUNGHEZZABANCO>MEMORIA
  1074.    Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1075.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1076.    SENZAMEMORIA=True
  1077.   Else 
  1078.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1079.    Bload FILE$,Start(BANCODIIO)
  1080.    SENZAMEMORIA=False
  1081.    Proc CARICARAWOIFF
  1082.    LUNGHEZZABANCO2=LUNGHEZZABANCO
  1083.    Reserve As Chip Work BANCO4,LUNGHEZZABANCO2
  1084.    Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO4)
  1085.   End If 
  1086.  End If 
  1087.  LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1088.  If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  1089.   Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  1090.   Wait 200 : Pop Proc
  1091.  End If 
  1092.  If SENZAMEMORIA=True Then Pop Proc
  1093.  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  1094.  GENERACAMPIONE=True
  1095.  Reserve Zone 8
  1096.  MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
  1097.  MOSTRACAMPIONEPERMISCELAZIONE[BANCO4,72]
  1098.  Print At(0,8);Zone$("Suona",1)
  1099.  Print At(6,8);Zone$("Ferma",2)
  1100.  Print At(12,8);Zone$("Ciclo",3)
  1101.  Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
  1102.  Print At(18,8);Zone$("Filtro",4)
  1103.  Print At(0,17);Zone$("Suona",5)
  1104.  Print At(6,17);"Lunghezza>";Str$(Length(BANCO4))-" ";" Byte"
  1105.  Print At(25,8);Zone$("Frequenza",6);
  1106.  Print Zone$(Chr$(147)+Chr$(148),7);
  1107.  Print Zone$(Chr$(149)+Chr$(150),8);
  1108.  Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  1109.  Proc CICLO
  1110.  Proc FILTRO
  1111.  Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1112.  Repeat 
  1113.   Repeat 
  1114.    TASTOPREMUTO$=Inkey$
  1115.    TASTODELTOPOPREMUTO=Mouse Key
  1116.    ZONATOPO=Mouse Zone
  1117.    If TASTODELTOPOPREMUTO=1
  1118.     If DENTROZONA=False
  1119.      If ZONATOPO=1
  1120.       Inverse On : Print At(0,8);"Suona"
  1121.       Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1122.       Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1123.      End If 
  1124.      If ZONATOPO=2
  1125.       Inverse On : Print At(6,8);"Ferma"
  1126.       Sam Stop 
  1127.      End If 
  1128.      If ZONATOPO=3
  1129.       CICLO= Not CICLO : Proc CICLO
  1130.      End If 
  1131.      If ZONATOPO=4
  1132.       FILTRO= Not FILTRO : Proc FILTRO
  1133.      End If 
  1134.      If ZONATOPO=5
  1135.       Inverse On : Print At(0,17);"Suona"
  1136.       Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1137.       Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1138.      End If 
  1139.      If ZONATOPO=6
  1140.       Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  1141.       NUOVAFREQUENZA=FREQUENZA
  1142.       Proc FREQUENZA
  1143.       NUOVOMESSAGGIO=True
  1144.      End If 
  1145.      If ZONATOPO=7
  1146.       Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  1147.       Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  1148.       Inc NUOVAFREQUENZA
  1149.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1150.       Proc FREQUENZA
  1151.       NUOVOMESSAGGIO=True
  1152.      End If 
  1153.      If ZONATOPO=8
  1154.       Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  1155.       Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  1156.       Dec NUOVAFREQUENZA
  1157.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1158.       Proc FREQUENZA
  1159.       NUOVOMESSAGGIO=True
  1160.      End If 
  1161.      DENTROZONA=True
  1162.     End If 
  1163.    Else If TASTODELTOPOPREMUTO=2
  1164.     If ZONATOPO=7
  1165.      Inverse On 
  1166.      Print At(34,8);Chr$(147)+Chr$(148)
  1167.      Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  1168.      Inc NUOVAFREQUENZA
  1169.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1170.      Proc FREQUENZA
  1171.      NUOVOMESSAGGIO=True
  1172.     End If 
  1173.     If ZONATOPO=8
  1174.      Inverse On 
  1175.      Print At(36,8);Chr$(149)+Chr$(150)
  1176.      Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  1177.      Dec NUOVAFREQUENZA
  1178.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1179.      Proc FREQUENZA
  1180.      NUOVOMESSAGGIO=True
  1181.     End If 
  1182.    Else 
  1183.     Inverse Off 
  1184.     Print At(0,8);"Suona"
  1185.     Print At(6,8);"Ferma"
  1186.     Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  1187.     Print At(0,17);"Suona"
  1188.     If NUOVOMESSAGGIO=True
  1189.      Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1190.      NUOVOMESSAGGIO=False
  1191.     End If 
  1192.     DENTROZONA=False
  1193.    End If 
  1194.   Until TASTOPREMUTO$<>""
  1195.   If TASTOPREMUTO$=Chr$(27) Then Pop Proc
  1196.  Until TASTOPREMUTO$=" "
  1197.  Proc TIC["Vuoi la dissolvenza da un campione all'altro (s/n)?",ULTIMALINEA]
  1198.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1199.  If RISPOSTA$<>"s" and RISPOSTA$<>"n" Then Pop Proc
  1200.  If RISPOSTA$="s"
  1201.   If LUNGHEZZABANCO1>LUNGHEZZABANCO2
  1202.    SCELTA=1
  1203.   Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
  1204.    Repeat 
  1205.     Proc TIC["I 2 campioni sono lunghi uguali; quale scegli come campione di partenza (1/2)?",ULTIMALINEA]
  1206.     SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
  1207.    Until SCELTA=1 or SCELTA=2
  1208.   Else 
  1209.    SCELTA=2
  1210.   End If 
  1211.   Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1212.   LUNGHEZZAMISCELAZIONE=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1213.   For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1214.    VLOREPERCENTUALE=(INDIRIZZO*100)/(LUNGHEZZAMISCELAZIONE-1)
  1215.    DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1216.    If DATO1>127
  1217.     Add DATO1,-256
  1218.    End If 
  1219.    DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1220.    If DATO2>127
  1221.     Add DATO2,-256
  1222.    End If 
  1223.    If SCELTA=1
  1224.     DATO1=(DATO1*VLOREPERCENTUALE)/100
  1225.     If INDIRIZZO<=LUNGHEZZABANCO2
  1226.      DATO2=(DATO2*(100-VLOREPERCENTUALE))/100
  1227.     Else 
  1228.      DATO2=0
  1229.     End If 
  1230.    Else 
  1231.     If INDIRIZZO<=LUNGHEZZABANCO1
  1232.      DATO1=(DATO1*(100-VLOREPERCENTUALE))/100
  1233.     Else 
  1234.      DATO1=0
  1235.     End If 
  1236.     DATO2=(DATO2*VLOREPERCENTUALE)/100
  1237.    End If 
  1238.    DATOMISCELAZIONE=(DATO1+DATO2)/2
  1239.    If DATOMISCELAZIONE<0
  1240.     Add DATOMISCELAZIONE,256
  1241.    End If 
  1242.    Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1243.    XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1244.    Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1245.   Next INDIRIZZO
  1246.  End If 
  1247.  If RISPOSTA$="n"
  1248.   Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1249.   LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1250.   For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1251.    DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1252.    DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1253.    If DATO1>127
  1254.     Add DATO1,-256
  1255.    End If 
  1256.    If DATO2>127
  1257.     Add DATO2,-256
  1258.    End If 
  1259.    DATOMISCELAZIONE=(DATO1+DATO2)/2
  1260.    If DATOMISCELAZIONE<0
  1261.     Add DATOMISCELAZIONE,256
  1262.    End If 
  1263.    Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1264.    XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1265.    Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1266.   Next INDIRIZZO
  1267.  End If 
  1268.  ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  1269. End Proc
  1270. Procedure MOSTRACAMPIONE
  1271.  INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
  1272.  PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
  1273.  Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
  1274.  For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  1275.   DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1276.   Polyline To X,31-DATO/4 : Inc X
  1277.  Next INDIRIZZO
  1278.  XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
  1279.  Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1280.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1281.  Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
  1282.  Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
  1283.  Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1284.  DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
  1285. End Proc
  1286. Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
  1287.  IC=Start(B) : FC=Start(B)+Length(B)-1
  1288.  PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
  1289.  Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
  1290.  For INDIRIZZO=IC To FC Step PASSO
  1291.   DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1292.   Polyline To X,P+31-DATO/4 : Inc X
  1293.  Next INDIRIZZO
  1294. End Proc
  1295. Procedure MOSTRASINTETICO
  1296.  Shared LUNGHEZZASINTETICO
  1297.  Cls 0,0,0 To 511+1,63+1
  1298.  Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1299.  Gr Locate 0,31 : DIVISORE=1
  1300.  For X=0 To LUNGHEZZASINTETICO-1
  1301.   DATO=F0RMADONDA(X)/DIVISORE
  1302.   If DATO>127 or DATO<-128
  1303.    Cls 0,0,0 To 511+1,63+1
  1304.    Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1305.    Gr Locate 0,31 : Inc DIVISORE : X=-1
  1306.   End If 
  1307.   If X>-1
  1308.    Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
  1309.    If DATO<0
  1310.     Add DATO,256
  1311.    End If 
  1312.    Poke Start(BANCO)+X,DATO
  1313.   End If 
  1314.  Next X
  1315. End Proc
  1316. Procedure MOSTRALAZONAATTIVA
  1317.  Print At(65,8);ZONAATTIVA$
  1318. End Proc
  1319. Procedure MULTIPLO
  1320.  Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  1321.  Reserve As Work BANCO3,LUNGHEZZASINTETICO
  1322.  Repeat 
  1323.   For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
  1324.    DATO=Peek(Start(BANCO4)+X)
  1325.    INDIRIZZO=Start(BANCO3)+M
  1326.    Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  1327.   Next X
  1328.  Until M=LUNGHEZZASINTETICO
  1329.  Gr Locate 0,103
  1330.  For X=0 To LUNGHEZZASINTETICO-1
  1331.   DATO=Peek(Start(BANCO3)+X)
  1332.   INDIRIZZO=Start(BANCO4)+X
  1333.   Poke INDIRIZZO,DATO
  1334.   If DATO>127
  1335.    Add DATO,-256
  1336.   End If 
  1337.   Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  1338.  Next X
  1339.  Erase BANCO3
  1340.  Inverse Off 
  1341.  Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1
  1342.  Print At(76,17); Using "####";MULTIPLO#
  1343. End Proc
  1344. Procedure SALVAUNFILE
  1345.  Sam Loop Off : Sam Stop : CICLO=False
  1346.  FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
  1347.  If FILE$<>""
  1348.   TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  1349.   RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1350.   If RISPOSTA$="s"
  1351.    Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
  1352.    Proc TIC[FILE$,ULTIMALINEA]
  1353.    LUNGHEZZANOME=Len(NOMEFILE$)/4*4
  1354.    RESTONOME=Len(NOMEFILE$) mod 4
  1355.    If RESTONOME>0
  1356.     Add LUNGHEZZANOME,4
  1357.    End If 
  1358.    LUNGHEZZAANNO=36
  1359.    LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
  1360.    If NOMEFILE$<>""
  1361.     Add LUNGHEZZABANCO,8+LUNGHEZZANOME
  1362.    End If 
  1363.    LUNGHEZZABANCOPARI=LUNGHEZZABANCO mod 2
  1364.    If LUNGHEZZABANCOPARI=1
  1365.     Inc LUNGHEZZABANCO
  1366.    End If 
  1367.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1368.    INDIRIZZO=Start(BANCODIIO)
  1369.    Poke$ INDIRIZZO,"FORM"
  1370.    Add INDIRIZZO,4
  1371.    Loke INDIRIZZO,LUNGHEZZABANCO-8
  1372.    Add INDIRIZZO,4
  1373.    Poke$ INDIRIZZO,"8SVXVHDR"
  1374.    Add INDIRIZZO,8
  1375.    Loke INDIRIZZO,20
  1376.    Add INDIRIZZO,4
  1377.    Loke INDIRIZZO,0
  1378.    Add INDIRIZZO,4
  1379.    Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1380.    Add INDIRIZZO,4
  1381.    Loke INDIRIZZO,0
  1382.    Add INDIRIZZO,4
  1383.    Doke INDIRIZZO,NUOVAFREQUENZA
  1384.    Add INDIRIZZO,2
  1385.    Doke INDIRIZZO,256
  1386.    Add INDIRIZZO,2
  1387.    Doke INDIRIZZO,256
  1388.    Add INDIRIZZO,2
  1389.    Doke INDIRIZZO,0
  1390.    Add INDIRIZZO,2
  1391.    If NOMEFILE$<>""
  1392.     Poke$ INDIRIZZO,"NAME"
  1393.     Add INDIRIZZO,4
  1394.     Loke INDIRIZZO,LUNGHEZZANOME
  1395.     Add INDIRIZZO,4
  1396.     Poke$ INDIRIZZO,NOMEFILE$
  1397.     Add INDIRIZZO,Len(NOMEFILE$)
  1398.     If RESTONOME>0
  1399.      ZERINELNOME=4-RESTONOME
  1400.      Inverse On 
  1401.      For A=1 To ZERINELNOME
  1402.       Poke INDIRIZZO,0
  1403.       Inc INDIRIZZO
  1404.      Next A
  1405.     End If 
  1406.    End If 
  1407.    Poke$ INDIRIZZO,"ANNO"
  1408.    Add INDIRIZZO,4
  1409.    Loke INDIRIZZO,LUNGHEZZAANNO
  1410.    Add INDIRIZZO,4
  1411.    Poke$ INDIRIZZO,"SamplesMaster by Stefano Regattin"+String$(Chr$(0),3)
  1412.    Add INDIRIZZO,LUNGHEZZAANNO
  1413.    Poke$ INDIRIZZO,"BODY"
  1414.    Add INDIRIZZO,4
  1415.    Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1416.    Add INDIRIZZO,4
  1417.    Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
  1418.    Add INDIRIZZO,LUNGHEZZACAMPIONE+LUNGHEZZABANCOPARI
  1419.    If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
  1420.     Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
  1421.    Else 
  1422.     Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
  1423.     Erase BANCODIIO
  1424.     Wait 200
  1425.     Pop Proc
  1426.    End If 
  1427.    Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
  1428.    Erase BANCODIIO
  1429.   Else 
  1430.    Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
  1431.    Proc TIC[FILE$,ULTIMALINEA]
  1432.    Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  1433.   End If 
  1434.   Wait 200
  1435.  End If 
  1436. End Proc
  1437. Procedure SETTALEZONE
  1438.  Reserve Zone 21
  1439.  Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
  1440.  Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
  1441.  Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
  1442.  Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
  1443.  Print At(21,ULTIMALINEA-3);"Mostra campione"
  1444.  Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
  1445.  Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
  1446.  Print At(40,ULTIMALINEA-3);"Posizione"
  1447.  Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
  1448.  Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
  1449.  Print At(53,ULTIMALINEA-3);"Cerca lo zero"
  1450.  Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
  1451.  Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
  1452.  Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
  1453.  Set Zone 12,0,72 To 639,72+ALTEZZA
  1454.  Set Zone 13,0,0 To 639,63
  1455.  Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
  1456.  Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
  1457.  Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
  1458.  Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
  1459.  YSLIDERINGRANDIMENTO=72+ALTEZZA+1
  1460.  Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
  1461.  Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
  1462.  Print Zone$(Chr$(147)+Chr$(148),19);
  1463.  Print Zone$(Chr$(149)+Chr$(150),20);
  1464.  Print ">"
  1465.  Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
  1466. End Proc
  1467. Procedure SETTASCHERMO
  1468.  If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  1469.  If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
  1470.  ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
  1471.  ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  1472.  Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  1473.  Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
  1474.  Wait Vbl : Limit Mouse 
  1475. End Proc
  1476. Procedure SLIDERINGRANDIMENTO
  1477.  Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
  1478. End Proc
  1479. Procedure SOMMA
  1480.  Shared LUNGHEZZASINTETICO
  1481.  For X=0 To LUNGHEZZASINTETICO-1
  1482.   DATO=Peek(Start(BANCO4)+X)
  1483.   If DATO>127
  1484.    Add DATO,-256
  1485.   End If 
  1486.   Add F0RMADONDA(X),DATO
  1487.  Next X
  1488. End Proc
  1489. Procedure SUONA
  1490.  Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1491.  Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1492. End Proc
  1493. Procedure TIC[TESTO$,LINEA]
  1494.  '-> Testo Invertito e Centrato by Stefano Regattin 
  1495.  'i> 23 maggio 1996 
  1496.  'm> 25 maggio 1996 
  1497.  '--------------------------------------------------------------------------- 
  1498.  'LINEA contiene il numero di linea dove si posizioner� il testo; se vale -1
  1499.  ' (True) il testo sar� posizionato alla linea dove si trova il cursore; in 
  1500.  ' questo caso sar� necessario un comando PRINT per spostare il cursore 
  1501.  '----------------------------------------------------------------------
  1502.  If LINEA=True Then L=Y Curs Else L=LINEA
  1503.  Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  1504. End Proc